package com.candy.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * @author donglin
 * @Title:
 * @类名: Test01
 * @date 2020/7/23
 */
public class Test01 {
    public static void main(String[] args) {
        test03();
    }

    public static void test03() {
        Student stu=new Student();
        //获取类文件
        Class type2=stu.getClass();
        try {
            //获取指定的某一个属性对象
            Field stuName=type2.getDeclaredField("stuName");
            //设置操作权限，让他可以对私有的属性进行操作
            stuName.setAccessible(true);
            //对属性值进行操作
            stuName.set(stu,"张三");
            System.out.println(stu);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    public static void test02() {

        //获取类文件的三种方式
        Class type1=Student.class;
        //获取该类下的所有属性信息，不收访问控制符的限制
        Field[] f=type1.getDeclaredFields();
        for (Field ff:f) {
            //遍历该类下的所有属性信息
            //getModifiers()获取属性的访问控制修饰符，返回值类型为int类型，需要只用Modifier的toString方法进行转义
            //getType()方法：进行获取属性的数据类型
            //getName()方法：获取属性的名字
            System.out.println(Modifier.toString(ff.getModifiers())+"\t"+ff.getType().getSimpleName()
            +"\t"+ff.getName());
        }


    }

    public static void test01() {
        //获取类文件的三种方式
        Class type1=Student.class;
        Student stu=new Student();
        Class type2=stu.getClass();
        try {
            //使用三种方式获取的类文件是同一个类文件对象
            Class type3=Class.forName("com.candy.reflect.Student");
            System.out.println("type1==type2"+(type1==type2));
            System.out.println("type1==type3"+(type1==type3));
            System.out.println("type2==type3"+(type2==type3));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}
